package com.example.live.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Component
public class GenerateToken {

    //用于签名加密的密钥，为一个字符串（需严格保密）
    //使用@Value取值三个注意点：1.不能用static修饰，2.类上需要@Component，3.使用类的时候需要@Resource方式不能用new方式
    @Value("${token.key}")
    private String KEY;

    public String getToken(String phone, String id) {
        JWTCreator.Builder jwtBuilder = JWT.create();
        Map<String, Object> headers = new HashMap<>();

        headers.put("typ", "jwt");   //设置token的type为jwt
        headers.put("alg", "hs256");  //表明加密的算法为HS256
        return jwtBuilder.withHeader(headers)
                //接下来为设置PayLoad,Claim中的键值对可自定义
                //设置用户名
                .withClaim("phone", phone)
                //是否为VIP用户
                .withClaim("isVIP", true)
                //设置用户id
                .withClaim("id", id)
                //token失效时间，这里为一天后失效
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
                //设置该jwt的发行时间，一般为当前系统时间
                .withIssuedAt(new Date(System.currentTimeMillis()))
                //token的发行者（可自定义）
                .withIssuer("ApexWorld")
                //进行签名，选择加密算法，以一个字符串密钥为参数
                .sign(Algorithm.HMAC256(KEY));
    }


}
